package com.team06.util;

import com.team06.pojo.Ckls;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class CklsXmlParserUtil {
    public static Ckls parseXml(File xmlFile) {
        Ckls ckls = new Ckls();
        try {
            SAXBuilder saxBuilder = new SAXBuilder();
            Document document = saxBuilder.build(xmlFile);
            Element root = document.getRootElement();

            // 解析 META 节点
            Element meta = root.getChild("META");
            ckls.setMetaSnDR(meta.getChildText("SNDR"));
            ckls.setMetaRCVR(meta.getChildText("RCVR"));
            ckls.setMetaSEQN(Integer.parseInt(meta.getChildText("SEQN")));
            ckls.setMetaDDTM(meta.getChildText("DDTM"));
            ckls.setMetaTYPE(meta.getChildText("TYPE"));
            ckls.setMetaSTYP(meta.getChildText("STYP"));

            // 解析 DFLT 节点
            Element dflt = root.getChild("DFLT");
            ckls.setDfltFLID(dflt.getChildText("FLID"));
            ckls.setDfltFFID(dflt.getChildText("FFID"));
            ckls.setDfltFIDE(dflt.getChildText("FIDE"));
            ckls.setDfltFATT(dflt.getChildText("FATT"));

            // 解析 CKLS 节点
            Element cklsEle = dflt.getChild("CKLS");
            if (cklsEle != null) {
                ckls.setDfltCklsFces(cklsEle.getChildText("FCES"));
                ckls.setDfltCklsFcee(cklsEle.getChildText("FCEE"));
                ckls.setDfltCklsFcrs(cklsEle.getChildText("FCRS"));
                ckls.setDfltCklsFcre(cklsEle.getChildText("FCRE"));
                ckls.setDfltCklsMces(cklsEle.getChildText("MCES"));
                ckls.setDfltCklsMcee(cklsEle.getChildText("MCEE"));
                ckls.setDfltCklsMcrs(cklsEle.getChildText("MCRS"));
                ckls.setDfltCklsMcre(cklsEle.getChildText("MCRE"));
                ckls.setDfltCklsFcdp(cklsEle.getChildText("FCDP"));
                ckls.setDfltCklsMcdp(cklsEle.getChildText("MCDP"));

                // 解析 CNTR 子节点列表
                List<Element> cntrElements = cklsEle.getChildren("CNTR");
                List<Ckls.Cntr> cntrList = new ArrayList<>();
                for (Element cntrEle : cntrElements) {
                    Ckls.Cntr cntr = new Ckls.Cntr();
                    cntr.setCkno(Integer.parseInt(cntrEle.getChildText("CKNO")));
                    cntr.setId(cntrEle.getChildText("ID"));
                    cntr.setCode(cntrEle.getChildText("CODE"));
                    cntr.setCkat(cntrEle.getChildText("CKAT"));
                    cntr.setType(cntrEle.getChildText("TYPE"));
                    cntr.setCcar(cntrEle.getChildText("CCAR"));
                    cntr.setEstr(cntrEle.getChildText("ESTR"));
                    cntr.setEend(cntrEle.getChildText("EEND"));
                    cntr.setRstr(cntrEle.getChildText("RSTR"));
                    cntr.setRend(cntrEle.getChildText("REND"));
                    cntr.setBtsc(cntrEle.getChildText("BTSC"));
                    cntrList.add(cntr);
                }
                ckls.setCntrList(cntrList);
            }

            return ckls;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("解析 Ckls XML 失败: " + xmlFile.getAbsolutePath(), e);
        }
    }
}